package query

import (
	"{{.Namespace}}/pkg/query-service/domain/{{.aggregate_name}}/view"
)

// {{.Name}}FindByIdQuery 按ID查询命令
type {{.Name}}FindByIdQuery struct {
	TenantId string `json:"tenantId"`
	Id       string `json:"id"`
}

// {{.Name}}FindByIdsQuery 按多个ID查询命令
type {{.Name}}FindByIdsQuery struct {
	TenantId  string `json:"tenantId"`
	Ids       []string `json:"ids"`
}

// {{.Name}}FindAllQuery 查询所有命令
type {{.Name}}FindAllQuery struct {
	TenantId string `json:"tenantId"`
}

{{- if .IsEntity }}
// {{.Name}}FindBy{{.AggregateName}}IdQuery 按聚合根ID查询命令
type {{.Name}}FindBy{{.AggregateName}}IdQuery struct {
    TenantId string `json:"tenantId"`
    {{.AggregateName}}Id  string `json:"{{.aggregateName}}Id"`
}

{{- end }}

// {{.Name}}FindPagingQuery 分页查询命令
type {{.Name}}FindPagingQuery struct {
	TenantId string     `json:"tenantId"`       // 租户id
	Fields   string     `json:"fields"`         // 字段值，多个用逗号分隔
	Filter   string     `json:"filter"`         // RSQL过滤条件
	Sort     string     `json:"sort"`           // 排序条件
	PageNum  int64      `json:"pageNum"`        // 当前页号
	PageSize int64      `json:"pageSize"`       // 页大小
    IsTotalRows bool    `json:"isTotalRows"`    // 是否汇总记录数
}

// {{.Name}}FindPagingResult 分页查询结果
type {{.Name}}FindPagingResult struct {
	Data        []*view.{{.Name}}View `json:"data"`                      // 分页数据列表
	TotalRows   *int64                `json:"totalRows,omitempty"`       // 总记录数
	TotalPages  *int64                `json:"totalPages,omitempty"`      // 总页数
	PageNum     int64                 `json:"pageNum"`                   // 当前页号
	PageSize    int64                 `json:"pageSize"`                  // 页大小
	Filter      string                `json:"filter"`                    // RSQL过滤条件
	Fields      string                `json:"fields"`                    // 字段值，多个用逗号分隔
	Sort        string                `json:"sort"`                      // 排序条件
	Error       error                 `json:"error"`                     // 错误
	IsFound     bool                  `json:"isFound"`                   // 是否找到数据
	IsTotalRows bool                  `json:"isTotalRows"`               // 是否统计总记录数
}

{{- if .IsEntity }}

func New{{.Name}}FindBy{{.AggregateName}}IdQuery(tenantId string, {{.aggregateName}}Id string) *{{.Name}}FindBy{{.AggregateName}}IdQuery {
    return &{{.Name}}FindBy{{.AggregateName}}IdQuery{
        TenantId: tenantId,
        {{.AggregateName}}Id: {{.aggregateName}}Id,
    }
}
{{- end }}

func New{{.Name}}FindPagingResult() *{{.Name}}FindPagingResult {
	return &{{.Name}}FindPagingResult{}
}

func New{{.Name}}FindByIdQuery(tenantId, id string) *{{.Name}}FindByIdQuery  {
    return &{{.Name}}FindByIdQuery{
        TenantId: tenantId,
        Id: id,
    }
}

func New{{.Name}}FindByIdsQuery(tenantId string, ids []string) *{{.Name}}FindByIdsQuery  {
    return &{{.Name}}FindByIdsQuery{
        TenantId: tenantId,
        Ids: ids,
    }
}

func New{{.Name}}FindAllQuery(tenantId string) *{{.Name}}FindAllQuery  {
    return &{{.Name}}FindAllQuery{
        TenantId: tenantId,
    }
}

func New{{.Name}}FindPagingQuery(tenantId string, fields string, filter string, sort string, pageNum int64, pageSize int64) *{{.Name}}FindPagingQuery  {
    return &{{.Name}}FindPagingQuery{
        TenantId    : tenantId,
        Fields      : fields,
        Filter      : filter,
        Sort        : sort,
        PageNum     : pageNum,
        PageSize    : pageSize,
        IsTotalRows : true,
    }
}

func (q *{{.Name}}FindPagingQuery) GetTenantId() string {
	return q.TenantId
}

func (q *{{.Name}}FindPagingQuery) SetTenantId(v string) {
	q.TenantId = v
}

func (q *{{.Name}}FindPagingQuery) GetFields() string {
	return q.Fields
}

func (q *{{.Name}}FindPagingQuery) SetFields(v string) {
	q.Fields = v
}

func (q *{{.Name}}FindPagingQuery) GetFilter() string {
	return q.Filter
}

func (q *{{.Name}}FindPagingQuery) SetFilter(v string) {
	q.Filter = v
}

func (q *{{.Name}}FindPagingQuery) GetSort() string {
	return q.Sort
}

func (q *{{.Name}}FindPagingQuery) SetSort(v string) {
	q.Sort = v
}

func (q *{{.Name}}FindPagingQuery) GetPageNum() int64 {
	return q.PageNum
}

func (q *{{.Name}}FindPagingQuery) SetPageNum(v int64) {
	q.PageNum = v
}

func (q *{{.Name}}FindPagingQuery) GetPageSize() int64 {
	return q.PageSize
}

func (q *{{.Name}}FindPagingQuery) SetPageSize(v int64) {
	q.PageSize = v
}

func (q *{{.Name}}FindPagingQuery) GetIsTotalRows() bool {
	return q.IsTotalRows
}

func (q *{{.Name}}FindPagingQuery) SetIsTotalRows(v bool) {
	q.IsTotalRows = v
}
